20180422 如果遇到用js包起來的資料怎麼辦
這問題,hen麻煩。
如果是用一般方法我們是抓取不到js裡包起來的資料的,
原因可能是因為javascript裡的資料是含動態行為的部分,
詳細要等我學到js才知道。
原本我們使用request取得網頁原始碼如下:
import requests
from bs4 import BeautifulSoup
r = requests.get('http://pala.tw/js-example/').text
print (r)
###Output by requests###
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>消失的文字</title>
</head>
<body>
<div id="word"></div>
<p>其實上面還有段文字<p>
<script type="text/javascript" src="example.js"></script>
</body>
</html>
如果要取得js裡面的資料,則需要使用selenium這個模組。 (pip3 install selenium)
selenium可給模擬瀏覽器讀取網頁的結果,
所以我們另外還要安裝可以讀取js隱藏資訊的webdriver,如PhantomJS。
(但跑的時候,有訊息警告我PhantomJS已被selenium棄用,請使用headless version of Chrome or Firefox,此待研究。)
from selenium import webdriver
Phanton_path = 'C:\\Users\\Ramone\\seleniumdriver\\phantomjs\\bin\\phantomjs.exe' # 給定一個瀏覽器的local位置
driver = webdriver.PhantomJS(executable_path=Phanton_path) # 導入PhantomJs當作webdriver
driver.get('http://pala.tw/js-example/') # 輸入網址,交給瀏覽器
pageSource = driver.page_source # 取得網頁原始碼
print(pageSource)
driver.close()
###Output by selenium (PhantomJS)###
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<title>消失的文字</title>
</head>
<body>
<div id="word">JavaScript渲染才看得到這行</div>
<p>其實上面還有段文字</p><p>
<script type="text/javascript" src="example.js"></script>
</p></body></html>
比較兩組結果的話會發現,
藏在js裡面的還有段文字:
<div id="word">JavaScript渲染才看得到這行</div>